// 
//  Author:
//    Matt Cooper vtbassmatt@gmail.com
// 
//  Copyright (c) 2010, Matt Cooper
// 
//  Microsoft Public License (Ms-PL)
// 
// This license governs use of the accompanying software. If you use the
// software, you accept this license. If you do not accept the license, do not
// use the software.
// 
// 1. Definitions
// 
// The terms "reproduce," "reproduction," "derivative works," and
// "distribution" have the same meaning here as under U.S. copyright law.
// 
// A "contribution" is the original software, or any additions or changes to
// the software.
// 
// A "contributor" is any person that distributes its contribution under this
// license.
// 
// "Licensed patents" are a contributor's patent claims that read directly on
// its contribution.
// 
// 2. Grant of Rights
// 
// (A) Copyright Grant- Subject to the terms of this license, including the
// license conditions and limitations in section 3, each contributor grants
// you a non-exclusive, worldwide, royalty-free copyright license to
// reproduce its contribution, prepare derivative works of its contribution,
// and distribute its contribution or any derivative works that you create.
// 
// (B) Patent Grant- Subject to the terms of this license, including the
// license conditions and limitations in section 3, each contributor grants
// you a non-exclusive, worldwide, royalty-free license under its licensed
// patents to make, have made, use, sell, offer for sale, import, and/or
// otherwise dispose of its contribution in the software or derivative works
// of the contribution in the software.
// 
// 3. Conditions and Limitations
// 
// (A) No Trademark License- This license does not grant you rights to use
// any contributors' name, logo, or trademarks.
// 
// (B) If you bring a patent claim against any contributor over patents that
// you claim are infringed by the software, your patent license from such
// contributor to the software ends automatically.
// 
// (C) If you distribute any portion of the software, you must retain all
// copyright, patent, trademark, and attribution notices that are present
// in the software.
// 
// (D) If you distribute any portion of the software in source code form,
// you may do so only under this license by including a complete copy of
// this license with your distribution. If you distribute any portion of the
// software in compiled or object code form, you may only do so under a
// license that complies with this license.
// 
// (E) The software is licensed "as-is." You bear the risk of using it. The
// contributors give no express warranties, guarantees or conditions. You
// may have additional consumer rights under your local laws which this
// license cannot change. To the extent permitted under your local laws,
// the contributors exclude the implied warranties of merchantability,
// fitness for a particular purpose and non-infringement.
// 


using System;
using BeerMath;

namespace BeerMath.Sample.Console
{


	public class Calcs
	{

		public Calcs ()
		{
		}
		
		private static decimal PromptDecimal(string text)
		{
			System.Console.Write(text);
			System.Console.Write(" >");
			return decimal.Parse(System.Console.ReadLine());
		}
		
		public static void McuTest()
		{
			decimal lbsGrain = PromptDecimal("Pounds of grain");
        		decimal degLovibond = PromptDecimal("Degrees Lovibond");
        		decimal totalVolume = PromptDecimal("Total volume");

            decimal MCUs = Malt.CalculateMcu(lbsGrain, degLovibond, totalVolume);

		    System.Console.WriteLine(String.Format("MCUs = {0}", MCUs));
		}

		public static void SrmTest()
		{
			decimal lbsGrain = PromptDecimal("Pounds of grain");
        		decimal degLovibond = PromptDecimal("Degrees Lovibond");
        		decimal totalVolume = PromptDecimal("Total volume");

            decimal SRM = Malt.CalculateSrm(lbsGrain, degLovibond, totalVolume);

		    System.Console.WriteLine(String.Format("SRM = {0}", SRM));
		}

		public static void EbcTest()
		{
			decimal lbsGrain = PromptDecimal("Pounds of grain");
        		decimal degLovibond = PromptDecimal("Degrees Lovibond");
        		decimal totalVolume = PromptDecimal("Total volume");

            decimal EBC = Malt.CalculateEbc(lbsGrain, degLovibond, totalVolume);

		    System.Console.WriteLine(String.Format("EBC = {0}", EBC));
		}
		
		public static void IbuTest()
		{
			decimal alphaAcid = PromptDecimal("Alpha acid %");
			decimal hopsOzs = PromptDecimal("Ounces of hops");
			decimal boilMinutes = PromptDecimal("Minutes of boil time");
			
			decimal IBU = Hops.CalculateIbus(alphaAcid, hopsOzs, boilMinutes);
			
			System.Console.WriteLine(String.Format("IBUs = {0}", IBU));
		}
		
		public static void TinsethTest()
		{
			decimal alphaAcid = PromptDecimal("Alpha acid %");
			decimal hopsOzs = PromptDecimal("Ounces of hops");
			decimal boilMinutes = PromptDecimal("Minutes of boil time");
			Gravity gravity = new Gravity(PromptDecimal("Gravity points of wort"));
			decimal gallons = PromptDecimal("Gallons of wort");
			
			decimal IBU = Hops.CalculateIbusTinseth(alphaAcid, hopsOzs, boilMinutes, gravity, gallons);
			
			System.Console.WriteLine(String.Format("IBUs = {0}", IBU));
		}
	}
}
